﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;

namespace OffInvoiceExcelAddIn.XmlMngFiles
{
    /// <summary>
    /// clase que provee un registro de todos los archivos de gestion xml
    /// </summary>
    public class XmlFileMngRegistry
    {
        /// <summary>
        /// representa un registro de un archivo de gestión xml
        /// </summary>
        public XmlFileMngRecord xmlFR;

        /// <summary>
        /// lista de los archivos de gestión xml
        /// </summary>
        [XmlArrayItem("XmlFileMngRecord", typeof(XmlFileMngRecord)), XmlArray("XmlInvoice")]
        public System.Collections.ArrayList XmlInvoice;

        /// <summary>
        /// Constructor
        /// </summary>
        public XmlFileMngRegistry()
        {
            XmlInvoice = new System.Collections.ArrayList();
        }

        /// <summary>
        /// realiza la busqueda de un fichero de gestíon xml dentro del registro de estos archivos
        /// </summary>
        /// <param name="y"> año del archivo de gestion buscado</param>
        /// <param name="m">mes del archivo de gestion buscado</param>
        /// <param name="monthIndex">indece del combobox de año seleccionado</param>
        /// <param name="status">tipo o estado de las facturas que alberga el archivo de gestion buscado</param>
        /// <returns>el registro buscado en caso de que exista, de lo contrario retorna null</returns>
        public XmlFileMngRecord searchRegManagementFile(string y, string m, int monthIndex, string status)
        {
            XmlFileMngRecord exist = null;
            foreach (XmlFileMngRecord item in XmlInvoice)
            {
                if (item.Year.ToUpper().Equals(y.ToUpper()) && (item.Month.Equals(monthIndex.ToString()) || monthIndex == 0) && item.Status.ToUpper().Equals(status.ToUpper()))
                {
                    exist = item;
                    //break; //modificado 
                }
            }
            return exist;
        }


        /// <summary>
        /// devuelve la reprentacion .net del registro xml de la factura
        /// </summary>
        /// <param name="path">directorio del archivo de gestion  </param>
        /// <returns>un ojeto.net con los datos rescatados del documento xml</returns>
        public XmlInvoice getInvoiceFromXml(string path)
        {
            try
            {
                XmlSerializer serializer = new XmlSerializer(typeof(XmlInvoice));
                System.IO.StreamReader r = new System.IO.StreamReader(path);
                XmlInvoice copia = (XmlInvoice)serializer.Deserialize(r);
                r.Close();
                return copia;

            }
            catch (Exception)
            {
                return null;
            }
        }



    }
}
